API Gateway+AWS Lambda(C#)でHTTPヘッダーやパスパラメータなどの情報を取得する方法
はじめに
API Gateway + AWS Lambda(C#)でHTTPヘッダーやパスパラメータ、ステージ変数などの各種情報を取得する方法を調べました。API Gatewayの設定でプロキシ統合にチェックを入れた場合の方法です。言語はC#で.NET Coreのバージョンは3.1です。
参照しているパッケージ
Lambdaのパッケージは以下を参照しています。
- Amazon.Lambda.APIGatewayEvents 2.4.0
- Amazon.Lambda.Core 1.2.0
- Amazon.Lambda.Serialization.SystemTextJson 2.1.0
- AWSSDK.APIGateway 3.5.2.15
- AWSSDK.Lambda 3.5.5.3
以下がLambdaファンクションのテストコードです。クエリストリング、パスパラメータ、ステージ変数を入れて試しましたが取得できていました。
using Amazon.Lambda.Core; using System; using System.Net; using System.Text.Json; using System.Text.Json.Serialization; using Amazon.Lambda.APIGatewayEvents; using System.Text; [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace Test { public class Function { public APIGatewayProxyResponse FunctionHandler(Request request, ILambdaContext context) { Console.WriteLine("resource:" + request.Resource); Console.WriteLine("path:" + request.Path); Console.WriteLine("httpMethod:" + request.HttpMethod); Console.WriteLine("headers:" + request.Headers.ToString()); Console.WriteLine("multiValueHeaders:" + request.MultiValueHeaders.ToString()); Console.WriteLine("queryStringParameters:" + request.QueryStringParameters); Console.WriteLine("multiValueQueryStringParameters:" + request.MultiValueQueryStringParameters); Console.WriteLine("pathParameters:" + request.PathParameters); Console.WriteLine("stageVariables:" + request.StageVariables); Console.WriteLine("requestContext:" + request.RequestContext); Console.WriteLine("body:" + request.Body); Console.WriteLine("isBase64Encoded:" + request.IsBase64Encoded); return new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.OK }; } } public class Request { [JsonPropertyName("resource")] public string Resource { get; set; } [JsonPropertyName("path")] public string Path { get; set; } [JsonPropertyName("httpMethod")] public string HttpMethod { get; set; } [JsonPropertyName("headers")] public JsonElement Headers { get; set; } [JsonPropertyName("multiValueHeaders")] public JsonElement MultiValueHeaders { get; set; } [JsonPropertyName("queryStringParameters")] public JsonElement QueryStringParameters { get; set; } [JsonPropertyName("multiValueQueryStringParameters")] public JsonElement MultiValueQueryStringParameters { get; set; } [JsonPropertyName("pathParameters")] public JsonElement PathParameters { get; set; } [JsonPropertyName("stageVariables")] public JsonElement StageVariables { get; set; } [JsonPropertyName("requestContext")] public JsonElement RequestContext { get; set; } [JsonPropertyName("body")] public string Body { get; set; } [JsonPropertyName("isBase64Encoded")] public Boolean IsBase64Encoded { get; set; } } }
以下のドキュメントを参考にしました。